<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>

</body>
<script>
	/**
	 * 将数字转换为中文大写表示
	 * @param {number} num - 要转换的数字
	 * @returns {string} 数字的中文大写字符串
	 */
	const unit = ['', '十', '百', '千']
	const numArr = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
	const baseUnit = ['', '万', '亿']

	function numToChinese(num) {
		// 反转数字字符串以便从低位到高位处理
		let strRevers = num.toString().split('').reverse()
		let result = []

		// 遍历每位数字，映射为中文数字+单位
		strRevers.forEach((item, index) => {
			if (item === '0') {
				// 0不显示单位
				result.push('')
			} else {
				const numChinese = numArr[parseInt(item)]
				const unitChinese = unit[index % 4]  // 获取个十百千单位
				result.push(`${numChinese}${unitChinese}`)
			}
		})

		// 按4位一组分割（中文计数单位每4位一个循环）
		const resultSplit = []
		for (let i = 0; i < result.length; i += 4) {
			resultSplit.push(result.slice(i, i + 4))
		}

		let resultStr = ''
		resultSplit.forEach((item, index) => {
			const itemReverse = item.reverse()  // 恢复组内原始顺序

			// 处理组内连续零的情况（如1001避免输出"一千零"）
			for(let i = 0; i < itemReverse.length; i++){
				if (itemReverse[i + 1] !== '' &&
						itemReverse[i + 1] !== undefined &&
						itemReverse[i] === ''){
					itemReverse[i] = '零'  // 插入连接零
				}
			}

			// 拼接组结果并添加基础单位（万/亿）
			resultStr = itemReverse.join('') + baseUnit[index] + resultStr
		})

		return resultStr
	}
	
	console.log(numToChinese(123456789));
	console.log(numToChinese(1620364233))
	console.log(numToChinese(230003720042))
</script>
</html>